﻿#include "pch.h"
#include "InputBox.h"
#include "Resource.h"

/**
 * 构造方法。
 * @param displayValue  编辑框上显示的默认值
 * @param maxChars      允许输入的最大字符数
 * @param maxValue      允许输入的最大值
 * @param minValue      允许输入的最小值
 * @param parent        父窗口
 * @param tipText       提示文字
 */
InputBox::InputBox(int displayValue, UINT maxChars, int maxValue, int minValue, CWnd* parent, LPCTSTR tipText) :
    CDialog(IDD_INPUT_BOX, parent),
    mMaxChars(maxChars),
    mIntValue(displayValue),
    mMaxValue(maxValue),
    mMinValue(minValue),
    mTipText(tipText) {
}

/**
 * 构造方法。
 * @param parent    父窗口
 * @param tipText   提示文字
 */
InputBox::InputBox(CWnd* parent, LPCTSTR tipText) :
    CDialog(IDD_INPUT_BOX, parent),
    mTipText(tipText) {
}

/**
 * 数据绑定方法。
 * @param dataExchanger 数据交换者
 */
void InputBox::DoDataExchange(CDataExchange* dataExchanger) {
    CDialog::DoDataExchange(dataExchanger);

    if (mMaxChars > 0) {
        CEdit* editValue = (CEdit*)CDialog::GetDlgItem(IDC_INPUT_BOX_EDIT_VALUE);
        editValue->SetLimitText(mMaxChars);
    }

    // 如果最小值与最大值相等，则表示编辑框接收的是字符串，否则表示编辑框接收的是整数
    if (mMinValue == mMaxValue) {
        DDX_Text(dataExchanger, IDC_INPUT_BOX_EDIT_VALUE, mStringValue);    // 接收字符串
    } else {
        DDX_Text(dataExchanger, IDC_INPUT_BOX_EDIT_VALUE, mIntValue);       // 接收整数
        DDV_MinMaxInt(dataExchanger, mIntValue, mMinValue, mMaxValue);
    }
}

/**
 * 获取用户输入的值。
 * @return 用户输入的值
 */
int InputBox::GetIntValue() {
    return mIntValue;
}

/**
 * 获取用户输入的字符串。
 * @return 用户输入的字符串
 */
LPCTSTR InputBox::GetStringValue() {
    return mStringValue;
}

/**
 * 初始化事件的响应方法。
 * @return 总是 TRUE
 */
BOOL InputBox::OnInitDialog() {
    CDialog::OnInitDialog();

    // 设置提示文字
    CDialog::SetDlgItemText(IDC_INPUT_BOX_TIP_TEXT, mTipText);

    // 显示默认值
    CDialog::UpdateData(FALSE);

    return TRUE;
}
